package com.shared.model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Embedded;
import javax.persistence.Id;

import com.googlecode.objectify.Key;
import com.googlecode.objectify.annotation.Entity;
import com.shared.data.IData;
import com.shared.utilitaire.Adresse;
import com.shared.utilitaire.Date;

@Entity
public class Assure implements IData {
	
	@Id private Long key;
	private String type ;
	private String civilite ;
	private String nom ;
	private String prenom ;
	@Embedded private Date dateNaissance ;
	@Embedded private Date datePermis ;
	private boolean permisAnnule ;
	@Embedded private Date dateReobtention ;
	@Embedded private Adresse adresse1 ;
	@Embedded private Adresse adresse2 ;
	private String mail ;
	private String numeroTel ;
	private String numeroMobile ;
	private Key<Interlocuteur> keyGestionnaire ;
	private String origine ;
	private Key<Apporteur> keyApporteur ;
	private Key<Apporteur> keySousApporteur ;
	private List<Key<Proposition>> listKeyProposition = new ArrayList<Key<Proposition>>();
	
	public Assure() {
		// TODO Auto-generated constructor stub
	}
	
	public Assure(String t, String c, String n, String p, Date dnaiss, Date dpermis, boolean permisAn, Adresse ad1, Adresse ad2, String m, String numTel, String numMob, String o){
		
		type = t ;
		civilite = c ;
		nom = n ;
		dateNaissance = dnaiss ;
		datePermis = dpermis ;
		permisAnnule = permisAn ;
		adresse1 = ad1 ;
		adresse2 = ad2 ;
		mail = m ;
		numeroTel = numTel ;
		numeroMobile = numMob ;		
		origine = o ;	
		prenom = p;
		
	}
	
		
	public Adresse getAdresse1() {
		return adresse1;
	}
	
	public Adresse getAdresse2() {
		return adresse2;
	}
	
	public String getCivilite() {
		return civilite;
	}
	
		
	public String getDateNaissanceToString() {
		return dateNaissance.getDateString();
	}
	
	public String getDatePermisToString() {
		return datePermis.getDateString();
	}
	
	public String getDateReobtentionToString() {
		return dateReobtention.getDateString();
	}
	
	public Date getDateNaissance(){
		return dateNaissance;
	}
	
	public Date getDatePermis(){
		return datePermis;
	}
	
	public Date getDateReobtention(){
		return dateReobtention;
	}
		
	public String getMail() {
		return mail;
	}
	
	public String getNom() {
		return nom;
	}
	
		
	public String getNumeroMobile() {
		return numeroMobile;
	}
	
	public String getNumeroTel() {
		return numeroTel;
	}
	
	public String getOrigine() {
		return origine;
	}
	
	public String getPrenom() {
		return prenom;
	}
	
	public String getType() {
		return type;
	}
	
	
	
	public boolean isPermisAnnule() {
		return permisAnnule ;
	}
	
	public void setAdresse1(Adresse adresse1) {
		this.adresse1 = adresse1;
	}
	
	public void setAdresse2(Adresse adresse2) {
		this.adresse2 = adresse2;
	}
	
	public void setCivilite(String civilite) {
		this.civilite = civilite;
	}
	
	
	
	public void setDateNaissance(Date dateNaissance) {
		this.dateNaissance = dateNaissance;
	}
	
	public void setDatePermis(Date datePermis) {
		this.datePermis = datePermis;
	}
	
	public void setDateReobtention(Date dateReobtention) {
		this.dateReobtention = dateReobtention;
	}
	
	public void setGestionnaire(Interlocuteur gestionnaire) {
		this.setKeyGestionnaire(new Key<Interlocuteur>(Interlocuteur.class, gestionnaire.getKey()));
	}
	
	public void setMail(String mail) {
		this.mail = mail;
	}
	
	public void setNom(String nom) {
		this.nom = nom;
	}
	
	public void setApporteur(Apporteur apporteur) {
		setKeyApporteur(new Key<Apporteur>(Apporteur.class, apporteur.getKey()));
	}
	
	public void setSousApporteur(Apporteur sousApporteur) {
		setKeySousApporteur(new Key<Apporteur>(Apporteur.class, sousApporteur.getKey()));
	}
	
	public void setNumeroMobile(String numeroMobile) {
		this.numeroMobile = numeroMobile;
	}
	
	public void setNumeroTel(String numeroTel) {
		this.numeroTel = numeroTel;
	}
	
	public void setOrigine(String origine) {
		this.origine = origine;
	}
	
	public void setPermisAnnule(boolean permisAnnule) {
		this.permisAnnule = permisAnnule;
	}
	
	public void setPrenom(String prenom) {
		this.prenom = prenom;
	}
	
	public void setType(String type) {
		this.type = type;
	}

	/**
	 * @param key the key to set
	 */
	public void setKey(Long key) {
		this.key = key;
	}

	/**
	 * @return the key
	 */
	public Long getKey() {
		return key;
	}

	/**
	 * @param keyGestionnaire the keyGestionnaire to set
	 */
	public void setKeyGestionnaire(Key<Interlocuteur> keyGestionnaire) {
		this.keyGestionnaire = keyGestionnaire;
	}

	/**
	 * @return the keyGestionnaire
	 */
	public Key<Interlocuteur> getKeyGestionnaire() {
		return keyGestionnaire;
	}

	/**
	 * @param keyApporteur the keyApporteur to set
	 */
	public void setKeyApporteur(Key<Apporteur> keyApporteur) {
		this.keyApporteur = keyApporteur;
	}

	/**
	 * @return the keyApporteur
	 */
	public Key<Apporteur> getKeyApporteur() {
		return keyApporteur;
	}

	/**
	 * @param keySousApporteur the keySousApporteur to set
	 */
	public void setKeySousApporteur(Key<Apporteur> keySousApporteur) {
		this.keySousApporteur = keySousApporteur;
	}

	/**
	 * @return the keySousApporteur
	 */
	public Key<Apporteur> getKeySousApporteur() {
		return keySousApporteur;
	}

	/**
	 * @param listKeyProposition the listKeyProposition to set
	 */
	public void setListKeyProposition(List<Key<Proposition>> listKeyProposition) {
		this.listKeyProposition = listKeyProposition;
	}

	/**
	 * @return the listKeyProposition
	 */
	public List<Key<Proposition>> getListKeyProposition() {
		return listKeyProposition;
	}

	public void addProposition(Proposition p){		
		listKeyProposition.add(new Key<Proposition>(Proposition.class, p.getKey()));
	}
	
	    
    
    public void removeProposition(Proposition proposition){
            Long key = proposition.getKey();
            int index=0;
            for(Key<Proposition> keyT : getListKeyProposition()){                   
                    if(keyT.getId()==key) break;
                    index++;
            }
            getListKeyProposition().remove(index);
    }
	
	
}
